/* drv_LPIT_edma.h */
#ifndef __DRV_LPIT_EDMA_H__
#define __DRV_LPIT_EDMA_H__

#include "hal_common.h"
#include "hal_lpit.h"
#include "hal_dmamux.h"
#include "hal_edma.h"

/*****************************************************************************/
/* 发送部分 */
/*****************************************************************************/
/*!
 * @brief 包含的硬件资源
 * @note 对于各个模块的配置将在应用中固化，即使用const修饰符描述变量
 */
typedef struct
{
    LPIT_Type *LPITBase;     /* LPIT Base. 用于在内部函数中访问LPIT串口硬件*/

    /* DMA LPIT channel. */
    uint32_t   EdmaLPITTxChnIdx; /* Edma channel for LPIT Tx */
    DMAMUX_TriggerSource_T EdmaLPITTxTriggerSource; /*!< LPITx Tx在DMAMUX中的选择通路 */

    IRQn_Type  EdmaTxChnIRQn; /* Edma Tx通道的传输完成中断向量号 */
} LPIT_EDMA_TxHwDev_T;

/*!
 * @brief 操作句柄
 * @note  保存全局变量，传输状态等等
 */
typedef struct
{
    LPIT_EDMA_TxHwDev_T *TxHwDevPtr; /* 关联硬件资源 */

    void (*TxDoneCallbackFunc)(void); /* 传输完成的回调函数，每次传输都可重新设定 */
} LPIT_EDMA_TxHandler_T;

/*!
 * @brief 初始化传输操作
 * @note  初始化硬件，关联结构体数据
 */
void LPIT_EDMA_InitTxHw(
    LPIT_EDMA_TxHandler_T *txHandler,      /*!< 创建传输句柄 */
    LPIT_EDMA_TxHwDev_T   *txHwDevPtr,     /*!< EDMA及相关配置 */
    LPIT_Config_T         *LPITConfigPtr /*!< LPIT硬件配置 */
);

void LPIT_EDMA_StartTx(
    LPIT_EDMA_TxHandler_T *txHandler,
    uint8_t *txBufPtr, uint32_t txLen,
    void (*txDoneCallback)(void)  /*!< 传输完成回调函数 */
);

void LPIT_EDMA_TxIRQHandler(LPIT_EDMA_TxHandler_T *txHandler);

/*****************************************************************************/
/* 接收部分 */
/*****************************************************************************/
/*!
 * @brief 包含的硬件资源
 * @note 对于各个模块的配置将在应用中固化，即使用const修饰符描述变量
 */
typedef struct
{
    LPIT_Type *LPITBase;     /* LPIT Base. 用于在内部函数中访问LPIT串口硬件*/
    bool enReConfigLPIT; /* 考虑Tx和Rx是两个传输通道，如果一方初始化了串口硬件，则另一方就不需要初始化了 */

    /* DMA UART Tx channel. */
    uint32_t   EdmaLPITRxChnIdx; /* Edma channel for LPIT Tx */
    DMAMUX_TriggerSource_T EdmaLPITRxTriggerSource;

    IRQn_Type  EdmaRxChnIRQn; /* Edma Tx通道的传输完成中断向量号 */

} LPIT_EDMA_RxHwDev_T;


#endif /* __DRV_LPIT_EDMA_H__ */
